এই অধ্যায়ে আপনি সি প্রোগ্রামিং এ সকল বিটিওয়াজ অপারেটর(Bitwise Operator) সম্বন্ধে জানবেন
সেন্ট্রাল প্রোসেসিং ইউনিট(CPU) এর মধ্যে এরেথম্যাটিক লজিক ইউনিট(ALU) এ সকল গাণিতিক ক্রিয়াকলাপ যেমন- যোগ-বিয়োগ, গুণ-ভাগ ইত্যাদি বিট-লেভেলে সম্পন্ন হয়। এই বিট-লেভেল(bit-level) অপারেশন সম্পন্ন করার কাজেই বিটওয়াইজ অপারেটর ব্যবহৃত হয়।
মনেকরি, নিচের টেবিলে x = 10 (বাইনারিতে 0000 1010) এবং y = 4 (বাইনারিতে 0000 0100)
অপারেটর | অপারেটরের অর্থ | উদাহরণ(x=10 এবং y=4) | ফলাফল |
---|---|---|---|
& | Bitwise AND | x& y = 0 (0000 0000) | 0 |
| | Bitwise OR | x | y = 14 (0000 1110) | 14 |
^ | Bitwise exclusive OR | x ^ y = 14 (0000 1110) | 14 |
~ | Bitwise complement | ~x = -11 (1111 0101) | -11 |
<< | Shift left | x<< 2 = 42 (0010 1000) | 42 |
>> | Shift right | x>> 2 = 2 (0000 0010) | 2 |
বিটওয়াইজ অপারেটরের দুটি অপারেন্ডের বিট যদি 1 হয় তাহলে বিটওয়াইজ AND অপারেটর এর আউটপুট 1 হবে।
কিন্তু যদি বিটওয়াইজ অপারেটর এর যেকোনো একটি অপারেন্ড 0(শূন্য) হয় তাহলে আউটপুট 0(শূন্য) হবে।
বিটওয়াইজ AND(&) অপারেটর এর গাণিতিক ব্যাখ্যা
10 = 0000 1010 (বাইনারিতে)
4 = 0000 0100 (বাইনারিতে)
10 এবং 4 এর বিট অপারেশন
0000 1010
& 0000 0100
________
0000 0000 = 0 (দশকমিকে)
kt_satt_skill_example_id=993
বিটওয়াইজ অপারেটরের দুটি অপারেন্ডের যেকোনো একটির বিট যদি 1 হয় তাহলে বিটওয়াইজ OR অপারেটর এর আউটপুট 1 হবে।
কিন্তু যদি বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড-ই 0(শূন্য) হয় তাহলে আউটপুট 0(শূন্য) হবে। সি প্রোগ্রামিং এ | কে বিটওয়াইজ OR অপারেটর বলা হয়।
বিটওয়াইজ OR(|) অপারেটর এর গাণিতিক ব্যাখ্যা
10 = 0000 1010 (বাইনারিতে)
4 = 0000 0100 (বাইনারিতে)
10 এবং 4 এর বিট অপারেশন
0000 1010
| 0000 0100
________
0000 1110 = 14 (দশকমিকে)
kt_satt_skill_example_id=994
XOR এর পূর্ণরুপ হলো exclusive OR । বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড যদি পরস্পর বিপরীত হয় তাহলে বিটওয়াইজ XOR অপারেটর এর আউটপুট 1 হবে।
কিন্তু যদি বিটওয়াইজ অপারেটর এর দুটি অপারেন্ড-ই একই রকম হয় তাহলে আউটপুট 0(শূন্য) হবে। সি প্রোগ্রামিং এ ^ কে বিটওয়াইজ XOR অপারেটর বলা হয়।
বিটওয়াইজ XOR অপারেটর গাণিতিক ব্যাখ্যা
10 = 0000 1010 (বাইনারিতে)
4 = 0000 0100 (বাইনারিতে)
10 এবং 4 এর বিট অপারেশন
0000 1010
^ 0000 0100
________
0000 1110 = 14 (দশকমিকে)
kt_satt_skill_example_id=995
বিটওয়াইজ পূরক(compliment) অপারেটর হলো উনারী(unary) অপারেটর যা কেবল মাত্র একটি অপারেন্ডের উপর কাজ করে। ইহা 1 কে পরিবর্তন করে 0 করে এবং 0 কে পরিবর্তন করে 1 করে। ইহাকে ~ এর মাধ্যমে চিহ্নিত করা হয়।
10 = 0000 1010 (বাইনারিতে) 10 এর বিটওয়াইজ পূরক অপারেটর ~ 0000 1010 ________ 1111 0101 = 245 (দশমিকে)
10 এর বিটওয়াইজ কমপ্লিমেন্ট 245 এর পরিবর্তে -11 হয়েছে। কিন্তু কেন?
কারণ যেকোনো পূর্ণসংখ্যা n এর জন্য বিটিওয়াইজ কমপ্লিমেন্ট -(n+1)
হবে। ইহা বুঝার জন্য আপনাকে প্রথমে 2'স কমপ্লিমেন্ট(Two's complement) সম্মন্ধে জানতে হবে।
বাইনারি সংখ্যায় 2's complement অপারেটর ব্যবহৃত হয়। একটি সংখ্যার 2's complement হলো ঐ সংখ্যার পূরকের সাথে ১ যোগ করলে যা হয় তার সমান। উদাহরনস্বরুপঃ
দশমিক বাইনারি 1's comliment 2's কমপ্লিমেন্ট 0 0000 0000 1111 1111 -(1111 1111+1) = -0000 0000 = -0(দশমিকে) 1 0000 0001 1111 1110 -(1111 1110+1) = -1111 1111 = -255((দশমিকে)) 245 1111 0101 0000 1010 -(0000 1010+1) = -1111 0101 = -11(দশমিকে)
নোটঃ 2'স কমপ্লিমেন্ট এর ক্ষেত্রে হাতের অঙ্ককে অবজ্ঞা করা হয়। অর্থাৎ ১ যোগ করার পরে শেষ অংকে অবশিষ্ট থাকলে তাকে হিসাবের বাইরে রাখা হয়।
10 এর বিটওয়াইজ কমপ্লিমেন্ট 245 এর পরিবর্তে -11 হয়েছে। কারণ 10 এর বিটওয়াইজ কমপ্লিমেন্ট হলো 245 (দশমিকে)। আবার 245 এর 2's complement হলো -11, সুতরাং 245 এর পরিবর্তে -11 আউটপুট হয়েছে।
N এর bitwise complement = ~N (N এর 2's complement ফর্মে)
এবং ~N এর 2'complement = -(~(~N)+1) = -(N+1)
kt_satt_skill_example_id=996
Left shift অপারেটর সমস্ত বিটকে নির্দিষ্ট সংখ্যক বিট বামে সরিয়ে দেয়। ইহাকে << এর মাধ্যমে প্রকাশ করা হয়।
200 = 11010100 (বাইনারিতে)
200<<1 = 1100100000 (বাইনারিতে এবং এক বিট দ্বারা Left shift হয়েছে। )
200<<0 =11010100 (0 বিট দ্বারা Left Shift হয়েছে। )
200<<2 = 1100100000 (বাইনারিতে) =800(দশমিকে)
200<<3 = 11001000000 (bainarite) =1600(দশমিকে)
kt_satt_skill_example_id=997
Right shift অপারেটর সমস্ত বিটকে নির্দিষ্ট সংখ্যক বিট ডানে সরিয়ে দেয়। ইহাকে >> এর মাধ্যমে প্রকাশ করা হয়।
200 = 11001000 (বাইনারিতে)
200>>1 = 01100100 (বাইনারিতে এবং 1 বিট দ্বারা Right shift হয়েছে।)
200>>0 = 11010100 (কোনো শিফট হয়নি)
200>>2 = 00110010 (বাইনারিতে) = 50(দশমিকে)
200>>3 = 00011001 (বাইনারিতে) = 25(দশমিকে)
kt_satt_skill_example_id=999
common.read_more